package com.situ.mall.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.situ.mall.entity.Cart;
import com.situ.mall.entity.Order;
import com.situ.mall.entity.OrderItem;
import com.situ.mall.mapper.CartMapper;
import com.situ.mall.mapper.OrderItemMapper;
import com.situ.mall.mapper.OrderMapper;
import com.situ.mall.service.IOrderService;
import com.situ.mall.utils.DateUtil;

@Service
public class OrderServiceImpl implements IOrderService {
	
	@Autowired
	private CartMapper cartMapper;
	
	@Autowired 
	private OrderItemMapper orderItemMapper;
	
	@Autowired
	private OrderMapper orderMapper;

//前台
	// 2020年4月2日--2.创建订单 (order_confirm.jsp 点结算)   order信息☞order表   、 orderItem信息☞order_item表 
	@Override
	public boolean /*void*/ insertOrder(Order order) {
		System.out.println("OrderServiceImpl.insertOrder()");
		/* service封装:：1. orderNo、 2.orderStatus、3.orderPayment、4.orderItem(类) */
		
		
		//1. orderNo （使用DateUtil工具类创建一传时间数字），不担心orderNo重复问题，，同一个用户同一时间只能创建一个订单 所以找的时候 by userId AND orderNo就好
		/*
		 * 	注意:：
		 * 	a.数据库 orderNo是bigInt类型，java里的orderNo要用Long才能对应 
		 */
		Long orderNo = DateUtil.getCurrentTimeNuber();
		order.setOrderNo(orderNo);
		System.out.println("有 shippingId、 paymentType、userId、orderNo: " + order);
		
		//2.orderStatus订单状态  ,,,不多BB,,,,setOrderStatus(10); 未付款
		Integer status = 10;
		order.setStatus(status);
		System.out.println("有 shippingId、 paymentType、userId、orderNo、orderStatus: " + order);
		
		//3.1.payment 支付总价 (所有商品价格 总和)     对应数据库decimal类型（保留两位小数）
		//BigDecimal payment = new BigDecimal("0.0");
		BigDecimal payment = BigDecimal.valueOf(0.0);
		
		//4. orderItem (购物车的商品集合 by userId AND checked=1打钩的)
		
		/* 测试1. 遍历orderItemList信息 */
		//ArrayList<OrderItem> orderItemList = new ArrayList<OrderItem>();

		List<Cart> cartList = cartMapper.selectOrderConfirmCartListByUserIdAndChecked(order.getUserId(), 1);
		for (Cart cart : cartList) {

			// 看 order_item表，需要封装哪些数据
			/*userId、orderNo、productId、快照productName、快照productImage、快照currentUnitPrice(productPrice)、cartQuantity、totalPrice(每条orderItem总价)、、*/
			OrderItem orderItem = new OrderItem();
			orderItem.setUserId(order.getUserId());
			orderItem.setOrderNo(order.getOrderNo());
			orderItem.setProductId(cart.getProduct().getId());
			orderItem.setProductName(cart.getProduct().getName());//快照
			orderItem.setProductImage(cart.getProduct().getMainImage());//快照
			orderItem.setCurrentUnitPrice(cart.getProduct().getPrice());//快照
			orderItem.setQuantity(cart.getQuantity());
			
			// orderItemTotalPrice 每一条商品的总价    （商品单价 * 购物车里这商品的数量）     对应数据库decimal类型（保留两位小数）
			//double totalPrice = cart.getProduct().getPrice().doubleValue() * cart.getQuantity();
			//orderItem.setTotalPrice(new BigDecimal(totalPrice));
			 
			BigDecimal productPrice = cart.getProduct().getPrice();
			BigDecimal totalPrice = productPrice.multiply( BigDecimal.valueOf(cart.getQuantity()) );
			orderItem.setTotalPrice(totalPrice); 
			
			
			//3.2 orderPayment  (所有orderItem的totalPrice的累加和)
			payment = payment.add(totalPrice);
			
			// 测试2. 
			//orderItemList.add(orderItem);  //测试 放入集合
			
			orderItemMapper.insert(orderItem); // 加进表
		}
		
		//3.3.orderPayment 加进order
		order.setPayment(payment);
		System.out.println("有 shippingId、 paymentType、userId、orderNo、orderStatus、orderPayment: " + order);
		
//		测试3.  遍历每条orderItem信息
//		for (OrderItem orderItem : orderItemList) {
//			System.out.println("我是orderItem："+orderItem);
//		}
		
		int count = orderMapper.insert(order);
		
		return count==1? true:false;
	}

}
